/*
 * device_nvm.h
 *
 *  Created on: 2023年11月1日
 *      Author: fjx
 */

#ifndef DS_BSP_DEVICE_NVM_H_
#define DS_BSP_DEVICE_NVM_H_
#include "device_type.h"


#define CONFIG_NVM_VERSION                               0x02


#ifndef NVMVersion_LENGTH
#define NVMVersion_LENGTH                                2       //NVM参数配置版本,默认开始从2开始
#endif


#include "device_partition.h"
/*******************************************
 *  NVM存储设置
 *  @V01    NVM Key采用device.h中DEVICE_ATTRIBUTE_EN
 *  @V02    NVM Key采用device_nvm.h中DEVICE_KEY_EN
 *
 *
 *
 *
 *
 *
 * @note  分工厂参数区、RFM用户参数区、HUB用户参数区
 *         0x1    ~ 0x1FFF  工厂参数区
 *         0x2000 ~ 0x2FFF  RFM用户参数区
 *         0x3000 ~ 0x3FFF  RFM、HUB共用用户参数区
 *         0x4000 ~ 0x7FFF  保留区域,为将来的使用
 *         0x8000 ~ 最后      HUB用户区
 *
 *
 *
 *
 *         工厂参数区key从1~0x1FFF,用来存储设备硬件相关的参数,该参数来源于工厂生产的时候输入,如SN,射频参数,该区域的参数不允许进行格式化;
 *         RFM用户参数区key从0x2000~0x2FFF,用来存储注册相关信息,以及子设备其它数据(该数据可以格式化，如计量);
 *         RFM、HUB共用用户参数区key,从0x3000~0x3FFF,用来存储RFM和HUB共用的用户参数信息,该信息可以格式化;
 *         HUB用户参数区key从0x8000~最后,该区域用来存储RFM设备注册相关相信,可以用来格式化RFM设备;
 *         保留区域0x4000~0x7FFF,该区域为将来扩展使用
 * *****************************************/
#if CONFIG_NVM_VERSION >= 0x2
#ifndef ENbyRFMUserParamDataMaxLen
#define ENbyRFMUserParamDataMaxLen                       32      //TODO:RFM用户参数区DATA最大的长度
                                                                 //     如其它设备类型有超过这个值,定义在device_type.h
#endif

#ifndef ENbyHUBUserParamDataMaxLen
#define ENbyHUBUserParamDataMaxLen                       43      //TODO:HUB用户参数区DATA最大的长度
                                                                 //
#endif



typedef enum{
  /*1.工厂参数区
   *
   * */
  ENbyKeyFactoryParamBase=1,
  ENbyKeySN=ENbyKeyFactoryParamBase,                     //16Byte序列号,对应device.h中ENpbyKeyM,兼容之前生产烧录规则
  ENbyKeyNVMVersion,                                     //**** 保留NVM参数版本   ***
  ENbyKeyRfCtune,                                        //4Byte
  ENbyKeylfxoCtune,                                      //1Byte
  ENbyKeyMacID,                                          //8Byte,mac地址,=5,兼容之前生产烧录规则
  ENbyKeyRfTxPower,                                      //2Byte
  ENbyKeyDefaultKey1,                                    //16Byte
  ENbyKeypbyDefaultKey2,
  ENbyKeyNVMKeyEN,
  ENbyKeyNVMKey,
  ENbyKeyBroadcastKey,
  ENbyKeySystemKey,
  ENbyKeyKeyB,
  ENbyKeySystemID,                                       //3Byte
  ENbyKeyPanId,
  ENbyKeyKeyA,
  ENbyKeyModelType,
  ENbyKeyHardType,
  ENbyKeyDeviceType,
  ENbyKeyRfVer,
  ENbyKeySensorVer,
  ENbyKeySmartPlugCalibration,                           //4Byte, 智能插座设备校准参数
  ENbyKeyLogEnable,                                      //4Byte,
  ENbyKeyRfReq,                                          //1Byte, HUB，RFM频点

  /***@note 在此处插入工厂参数的key,遵循最新创建的key值不得小于同区之前的key ***/
  ENbyKeyFactoryParamLast,
  /*2.RFM用户参数区
   *
   *
   * */
  ENbyKeyRFMUserParamBase=0x2000,
  ENbyKeyOption=ENbyKeyRFMUserParamBase,                //1Byte
  EnbyKeySmartPlugEnergy,
  ENbyKeySmartPlugTimes,
  ENbyKeyOnoffState,
  ENbyKeyChildLock,                                      //1Byte
  ENbyKeyEndDeviceRecvRollingCode,                       //4Byte,RFM自身的
  ENbyKeyASeqLed,                                        //1Byte
  ENbyKeyASeqOperate,                                    //1Byte




  /***@note 在此处插入RFM用户参数的key,遵循最新创建的key值不得小于同区之前的key ***/
  ENbyKeyRFMUserParamLast,
  ENbyKeyRFMUserParamMax=0x2FFF,
  /* 3.RFM、HUB共用用户参数区
   *
   *
   * */
  ENbyKeyRFMHubUserParamBase=0x3000,
  ENbyKeyCodeABKey,
  ENbyKeyRfmId,
  ENbyKeyItselfRollingCode,




  /***@note 在此处插入RFM和HUB共用用户参数的key,遵循最新创建的key值不得小于同区之前的key ***/
  ENbyKeyRFMHubUserParamLast,
  ENbyKeyRFMHubUserParamMax=0x3FFF,
  /* 4.保留区
   *
   * 0x4000 ~ 0x7FFF  保留区域,为将来的使用
   * */

  /* 5.HUB用户参数区
   *
   *
   * */
  ENbyKeyHubUserParamBase=0x8000,
  ENbyKeyNodeJoinInfo=ENbyKeyHubUserParamBase,                 //32Byte
  ENbyKeyNodeRegInfoFirst,                                     //数据结构见NodeRegInfo pack
  ENbyKeyNodeRegInfoLast=ENbyKeyNodeRegInfoFirst+NODE_MAX_COUNT-1,
  ENbyKeyNodeQrfH12GroupFirst,                                 //数据结构见NodeQrfH12Group pack
  ENbyKeyNodeQrfH12GroupLast=ENbyKeyNodeQrfH12GroupFirst+NODE_MAX_COUNT-1,
  ENbyKeyNodeQrfR12GroupFirst,
  ENbyKeyNodeQrfR12GroupLast=ENbyKeyNodeQrfR12GroupFirst+NODE_MAX_COUNT-1,//数据结构见NodeQrfR12Group pack
  ENbyKeyNodeGroupIdxFirst,
  ENbyKeyNodeGroupIdxLast=ENbyKeyNodeGroupIdxFirst+NODE_MAX_COUNT-1,      //数据结构见NodeGroupIdx pack
  ENbyKeyNodeOptionFirst,
  ENbyKeyNodeOptionLast=ENbyKeyNodeOptionFirst+NODE_MAX_COUNT-1,          //3Byte,单独一个数据
  ENbyKeyHubRecvRollingCodeFirst,
  ENbyKetHubRecvRollingCodeLast=ENbyKeyHubRecvRollingCodeFirst+NODE_MAX_COUNT-1, //4Byte


  /***@note 在此处插入HUB用户参数,遵循最新创建的key值不得小于同区之前的key ***/
  ENbyKeyHubUserParamBaseLast,
  ENbyKeyDeviceKeyLast,





}DEVICE_KEY_EN;


/*******************************************************************************
 * key pack说明
 * 单个key含多个数据成员的key有ENbyKeyNodeRegInfoFirst、NodeQrfH12Group
 *
 *
 *
 ******************************************************************************/
/*
 *  key pack说明
 *  NodeRegInfo pack: CodeAB[16]+SN[16]+Mac[8]+type[3]+option[1B]
 *
 */
#define NODEREGINFO_CODEAB_OFS                        0
#define NODEREGINFO_CODEAB_LEN                        KEY_MAX_LENGTH
#define NODEREGINFO_SN_OFS                            (NODEREGINFO_CODEAB_LEN)
#define NODEREGINFO_SN_LEN                            SN_LENGTH
#define NODEREGINFO_MAC_OFS                           (NODEREGINFO_SN_OFS+NODEREGINFO_SN_LEN)
#define NODEREGINFO_MAC_LEN                           MAC_ADDRESS_LENGTH
#define NODEREGINFO_TYPE_OFS                          (NODEREGINFO_MAC_OFS+NODEREGINFO_MAC_LEN)
#define NODEREGINFO_TYPE_LEN                          3
#define NODEREGINFO_OPTION_OPS                        (NODEREGINFO_TYPE_OFS+NODEREGINFO_TYPE_LEN)
#define NODEREGINFO_OPTION_LEN                        1
#define NODEREGINFO_MAX_LEN                           (NODEREGINFO_CODEAB_LEN+NODEREGINFO_SN_LEN+NODEREGINFO_MAC_LEN+NODEREGINFO_TYPE_LEN+NODEREGINFO_OPTION_LEN)

typedef enum{

  ENbyNodeRegInfoOption_C1  = 0x01,
  ENbyNodeRegInfoOption_C3  = 0x03,

}NODEREGINFO_OPTION_EN;

/*
 * key pack说明
 * NodeQrfH12Group pack: QrfH1[1B],QrfH2[1B]
 *
 *
 */
#define NodeQrfH12Group_QrfH1_OFS                     0
#define NodeQrfH12Group_QrfH1_LEN                     1
#define NodeQrfH12Group_QrfH2_OFS                     (NodeQrfH12Group_QrfH1_LEN)
#define NodeQrfH12Group_QrfH2_LEN                     1
#define NodeQrfH12Group_MAX_LEN                       (NodeQrfH12Group_QrfH1_LEN+NodeQrfH12Group_QrfH2_LEN)

/*
 * key pack说明
 * NodeQrfR12Group pack: QrfR1[1B],QrfR2[1B]
 * 存RAM
 *
 */
/*
 * key pack说明
 * NodeGroupIdx pack: 2B
 *
 *
 */
#define NodeGroupIdx_LEN                               2      //TODO:长度改为2Bye,旧版本为1

/*
 * key pack说明
 * NodeGroupIdx pack: 2B
 *
 *
 */

//typedef struct{
//
//};

#endif

#endif /* DS_BSP_DEVICE_NVM_H_ */
